package main

import (
	"fmt"
	"github.com/gocolly/colly/v2"
	"log"
	"strings"
)

func main() {
	targetUrl := "https://ybjxcx.lyybj.linyi.gov.cn/polpubt/#/question?title=%E5%8C%BB%E4%BF%9D%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E8%A7%A3%E7%AD%94"
	// 创建一个Colly采集器
	c := colly.NewCollector(
		// 设置并发限制，防止对目标服务器造成过大压力
		colly.MaxDepth(2),
		colly.AllowedDomains(targetUrl),
	)

	// 在采集器上注册一个回调函数，用于处理HTML元素
	c.OnHTML("a[href]", func(e *colly.HTMLElement) {
		link := e.Attr("href")            // 获取链接
		text := strings.TrimSpace(e.Text) // 获取链接文本

		// 打印提取的链接和文本
		fmt.Printf("链接: %s, 文本: %s\n", link, text)
	})

	// 在采集器上注册一个回调函数，用于处理页面爬取完成事件
	c.OnRequest(func(r *colly.Request) {
		fmt.Println("正在爬取:", r.URL)
	})

	// 在采集器上注册一个回调函数，用于处理错误
	c.OnError(func(r *colly.Response, err error) {
		log.Println("请求失败:", r.Request.URL, "错误:", err)
	})

	// 开始爬取指定的URL
	if err := c.Visit(targetUrl); err != nil {
		log.Println("爬取失败:", err)
	}
}
